Учебный курс: Подготовка на 1С:Специалист по платформе 1С:Предприятие 8.3

Задачи бухгалтерского учета – тема № 17, часть 2:
Учет животных в двух оценках одновременно – выполнение настроек и ввод данных

В предыдущей части мы проанализировали текст задачи и составили план решения, теперь переходим к его выполнению.

Создание справочников

Для хранения характеристик создадим в конфигурации справочник “Характеристики”. Поскольку по условию задачи характеристика – это набор свойств, добавим в созданный справочник “Характеристики” табличную часть “Свойства” с двумя реквизитами:

  • “Свойство” (тип – ПланВидовХарактеристикСсылка.СвойстваОбъектов)
  • “Значение” (тип – Характеристика.СвойстваОбъектов).

Справочник “Характеристики”

Рисунок 1 – Справочник “Характеристики”

Сразу настроим связь между свойством и значением:

Связь между свойством и значением свойства

Рисунок 2 – Связь между свойством и значением свойства

Это позволит пользователю при работе с конкретным свойством выбирать только те значения, которые относятся к этому свойству.

По условию задачи характеристики создаются для конкретной номенклатуры, значит, справочник “Характеристики” должен быть подчинен справочнику “Номенклатура”. Для этого настраиваем владельца для справочника “Характеристики”:

Настройка владельца для справочника “Характеристики”

Рисунок 3 – Настройка владельца для справочника “Характеристики”

Далее настроим характеристики на уровне объекта метаданных для справочника “Характеристики”:

Настройка характеристик для справочника “Характеристики”

Рисунок 4 – Настройка характеристик для справочника “Характеристики”

Поскольку перечень свойств, которые можно использовать для справочника “Характеристики”, хранится в ПВХ СвойстваОбъектов, именно этот ПВХ указываем в поле “Виды характеристик”.

Свойства и значения свойств, назначенные конкретному элементу справочника “Характеристики”, хранятся в табличной части Свойства этого элемента справочника. Поэтому именно табличную часть указываем в поле “Значения характеристик”.

Такая настройка позволит в отчетах на СКД выводить дополнительные характеристики вместе с реквизитами объектов. В настройках отчета они будут отображаться одинаково – как реквизиты объекта (в виде вложенных полей).

Переходим к настройке плана счетов, субконто и регистра бухгалтерии.

Настройка плана счетов, субконто и регистра бухгалтерии

Для организации учета в разрезе характеристик потребуется новый вид субконто – Характеристики (тип – СправочникСсылка.Характеристики).

Чтобы этот тип можно было использовать для элементов ПВХ “ВидыСубконто”, добавляем справочник “Характеристики” в тип значения характеристик для ПВХ “ВидыСубконто”.

Настройка ПВХ “ВидыСубконто”

Рисунок 5 – Настройка ПВХ “ВидыСубконто”

А затем создаем в ПВХ “ВидыСубконто” новый предопределенный элемент – Характеристики:

Новый вид субконто

Рисунок 6 – Новый вид субконто

Переходим к настройке плана счетов.

Поскольку по условию задачи суммовой учет должен вестись на всех счетах, а для товаров необходимо учитывать количество и вес, создадим в плане счетов “Управленческий” признаки учета “Количественный” и “Весовой” (Подробнее про признаки учета можно почитать в первой главе раздела “Задачи бухгалтерского учета”).

Признаки учета плана счетов “Управленческий”

Рисунок 7 – Признаки учета плана счетов “Управленческий”

Признаки учета субконто в данной задаче не используются, так как согласно условиям задачи себестоимость рассчитывается как средняя по характеристике. Это значит, что в разрезе характеристики хранится и сумма, и количество, а значит нет необходимости отключать хранение каких-либо итогов в разрезе субконто.

Добавляем виды субконто к счету “Товары” и настраиваем признаки учета

Настройка счета “Товары”

Рисунок 8 – Настройка счета “Товары”

Количественный и весовой учет на счете “ПрибылиУбытки” не включаем.

Поскольку по условию задачи счет “ПрибылиУбытки” корреспондирует со счетами “Товары” и “Покупатели”, из оборотов счета “ПрибылиУбытки” можно получить все необходимые для отчета данные:

  • Обороты со счетом “Товары” – себестоимость и количество проданных товаров;
  • Обороты со счетом “Покупатели” – сумма продаж товаров.

Итак, отчет будет строиться по счету “ПрибылиУбытки”, значит, на нем потребуется аналитика, аналогичная счету “Товары”.

Важно установить у обоих видов субконто (“Номенклатура” и “Характеристики”) на счете “ПрибылиУбытки” признак «Только обороты», так как используемые показатели (сумма продажи и себестоимость) являются оборотными.

Настройка счета “ПрибылиУбытки”

Рисунок 9 – Настройка счета “ПрибылиУбытки”

Добавляем регистр бухгалтерии “Управленческий” и создаем у него следующие ресурсы:

  • “Сумма” (тип – Число: длина – 12, точность – 2)
  • “Количество” (тип – Число: длина – 10, точность – 0)
  • “Вес” (тип – Число: длина – 15, точность – 3).

Примечание. Для значений ресурсов “Сумма”, “Количество” и “Вес” мы намеренно не исключали отрицательные значения. Возможно как сторнирование операций (при этом ресурсы записываются с отрицательными значениями), так и уменьшение веса и количества птиц в процессе их выращивания. Для отражения таких изменений может быть использован документ “Операция”.

Ресурсы регистра бухгалтерии “Управленческий”

Рисунок 10 – Ресурсы регистра бухгалтерии “Управленческий”

Поскольку в формулировке задачи указано, что “пользователь имеет возможность внести проводки в базе с произвольной корреспонденцией счетов”, для регистра бухгалтерии обязательно устанавливаем поддержку корреспонденции:

Рисунок 11 – Свойство “Корреспонденция” регистра бухгалтерии “Управленческий”

Свяжем ресурсы с признаками учета:

Связь ресурса “Количество” с признаком учета “Количественный”

Рисунок 12 – Связь ресурса “Количество” с признаком учета “Количественный”

Связь ресурса “Вес” с признаком учета “Весовой”

Рисунок 13 – Связь ресурса “Вес” с признаком учета “Весовой”

Это позволит связать необходимость ведения учета по определенным ресурсам регистра бухгалтерии с конкретным счетом.

Примечание. Обратите внимание, что для ресурсов “Количество” и “Вес” свойство “Балансовый” не устанавливается. Это позволяет независимо задавать  различные значения ресурсов по дебету и кредиту одной проводки, т.е. в проводке эти ресурсы появятся отдельно для дебета и для кредита: “КоличествоДт”, “КоличествоКт”, “ВесДт”, “ВесКт”.

Укажем регистраторы, выполняющие движения по регистру бухгалтерии:

Регистраторы движений регистра бухгалтерии “Управленческий”

Рисунок 14 – Регистраторы движений регистра бухгалтерии “Управленческий”

Примечание. На этом рисунке показаны все требуемые при решении регистраторы для регистра бухгалтерии. Но мы здесь немного забежали вперед:  документ “Операция” будет создан только на следующем шаге, и при его настройке будет указано, что он делает движения по регистру бухгалтерии “Управленческий”. В то же время документы “Приходная накладная” и “Расходная накладная” изначально присутствуют в каркасной конфигурации и, независимо от того, какая доработка понадобится для них в дальнейшем, на данном шаге мы можем включить их в число регистраторов регистра бухгалтерии.

Можно переходить к созданию документов.

Создание документа “Операция”

Подробно про создание документа “Операция” можно прочитать здесь: Задачи бухгалтерского учета – тема № 5: Как создать документ «Операция» для ручного ввода проводок.

Основное, что нужно помнить про документ “Операция”, – это то, что у него должно быть запрещено проведение:

Отключение движений у документа “Операция”

Рисунок 15 – Отключение движений у документа “Операция”

Создание документа “Приходная накладная”

В шапку документа добавляем реквизит “Поставщик” (тип – СправочникСсылка.Контрагенты), а в табличную часть СписокНоменклатуры – 2 реквизита:

  • “Характеристика” (тип – СправочникСсылка.Характеристики)
  • “Вес” (тип – Число: длина – 15, точность – 3, неотрицательное).

Новые реквизиты документа “Приходная накладная”

Рисунок 16 – Новые реквизиты документа “Приходная накладная”

Переходим к созданию обработки проведения. Код получается достаточно простой:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
        |    ПриходнаяНакладнаяСписокНоменклатуры.Характеристика КАК Характеристика,
        |    ПриходнаяНакладнаяСписокНоменклатуры.Количество КАК КоличествоДт,
        |    ПриходнаяНакладнаяСписокНоменклатуры.Вес КАК ВесДт,
        |    ПриходнаяНакладнаяСписокНоменклатуры.Сумма КАК Сумма,
        |    ПриходнаяНакладнаяСписокНоменклатуры.Ссылка.Поставщик КАК Поставщик,
        |    ПриходнаяНакладнаяСписокНоменклатуры.Ссылка.Дата КАК Период,
        |    &СчетДт КАК СчетДт,
        |    &СчетКт КАК СчетКт
        |ИЗ
        |    Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
        |ГДЕ
        |    ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("СчетДт", ПланыСчетов.Управленческий.Товары);
    Запрос.УстановитьПараметр("СчетКт", ПланыСчетов.Управленческий.Поставщики);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Движения.Управленческий.Записывать = Истина;

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        НовоеДвижение =  Движения.Управленческий.Добавить();
        ЗаполнитьЗначенияСвойств(НовоеДвижение, ВыборкаДетальныеЗаписи);
        НовоеДвижение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура]	= ВыборкаДетальныеЗаписи.Номенклатура;
        НовоеДвижение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Характеристики]	= ВыборкаДетальныеЗаписи.Характеристика;
        НовоеДвижение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты]	= ВыборкаДетальныеЗаписи.Поставщик;
        
    КонецЦикла;
    
КонецПроцедуры

Теперь можно заняться расходной накладной.

Создание документа “Расходная накладная”

Работу с документом “Расходная накладная” нужно начать с установки режима управления блокировкой данных для всей каркасной конфигурации. Для этого в свойствах корневого элемента дерева объектов метаданных устанавливаем режим “Управляемый”.

Установка управляемой блокировки

Рисунок 17 – Установка управляемой блокировки

Добавим недостающие реквизиты в табличную часть аналогично приходной накладной.

Новые реквизиты документа “Расходная накладная”

Рисунок 18 – Новые реквизиты документа “Расходная накладная”

Переходим к созданию обработки проведения.

Детально процесс реализации обработки проведения для документа «Расходная накладная» описан в теме Задачи бухгалтерского учета – тема № 6: Расчет себестоимости по средней в разрезе складов. Старая методика контроля остатков.

Код процедуры “Обработка проведения” для решения поставленной задачи выглядит следующим образом:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    //1. Подготовка регистра бухгалтерии - удаление существующих движений из базы
    Движения.Управленческий.Записывать = Истина;
    Движения.Управленческий.Записать();
    
    //2. Установка блокировки данных регистра бухгалтерии
    Блокировка			= Новый БлокировкаДанных;
    Элемент			= Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
    Элемент.Режим		= РежимБлокировкиДанных.Исключительный;
    Элемент.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Товары);
    Элемент.ИсточникДанных	= СписокНоменклатуры;
    Элемент.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура, "Номенклатура");
    Элемент.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.Характеристики, "Характеристика");
    
    Блокировка.Заблокировать();
    
    //3. Запрос получения данных для расчета себестоимости
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
    |    РасходнаяНакладнаяСписокНоменклатуры.Характеристика КАК Характеристика,
    |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
    |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Вес) КАК Вес,
    |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаПродажи
    |ПОМЕСТИТЬ ТЧСписокНоменклатуры
    |ИЗ
    |    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
    |ГДЕ
    |    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
    |    РасходнаяНакладнаяСписокНоменклатуры.Характеристика
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Номенклатура,
    |    Характеристика
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТЧСписокНоменклатуры.Номенклатура КАК Номенклатура,
    |    ТЧСписокНоменклатуры.Характеристика КАК Характеристика,
    |    ТЧСписокНоменклатуры.Номенклатура.Представление КАК НоменклатураПредставление,
    |    ТЧСписокНоменклатуры.Характеристика.Представление КАК ХарактеристикаПредставление,
    |    ТЧСписокНоменклатуры.Количество КАК Количество,
    |    ТЧСписокНоменклатуры.Вес КАК Вес,
    |    ТЧСписокНоменклатуры.СуммаПродажи КАК СуммаПродажи,
    |    ЕСТЬNULL(УправленческийОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    |    ЕСТЬNULL(УправленческийОстатки.ВесОстаток, 0) КАК ВесОстаток,
    |    ЕСТЬNULL(УправленческийОстатки.СуммаОстаток, 0) КАК СуммаОстаток
    |ИЗ
    |    ТЧСписокНоменклатуры КАК ТЧСписокНоменклатуры
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(
    |                &МоментВремени,
    |                Счет = &Счет,
    |                &МассивВидовСубконто,
    |                (Субконто1, Субконто2) В
    |                    (ВЫБРАТЬ
    |                        ТЧСписокНоменклатуры.Номенклатура,
    |                        ТЧСписокНоменклатуры.Характеристика
    |                    ИЗ
    |                        ТЧСписокНоменклатуры КАК ТЧСписокНоменклатуры)) КАК УправленческийОстатки
    |        ПО ТЧСписокНоменклатуры.Номенклатура = УправленческийОстатки.Субконто1
    |            И ТЧСписокНоменклатуры.Характеристика = УправленческийОстатки.Субконто2";
    
    //4. Заполнение параметров запроса
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("Счет", ПланыСчетов.Управленческий.Товары);

    //4.1. Определение массива видов субконто
    МассивВидовСубконто = Новый Массив();
    МассивВидовСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура);
    МассивВидовСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.Характеристики);
    Запрос.УстановитьПараметр("МассивВидовСубконто", МассивВидовСубконто); 
    
    
    
    //5. Выполняем запрос и обходим выборку
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        //6. Контроль остатков
        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
            // Выдача сообщений пользователю о наличии отрицательных остатков
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Недостаточно количества товара " + Выборка.НоменклатураПредставление 
			+ " с характеристикой " + Выборка.ХарактеристикаПредставление 
			+ ". Остаток товара: " + Выборка.КоличествоОстаток;
            Сообщение.Сообщить(); 
            Отказ = Истина;
        КонецЕсли; 
        
        Если Выборка.Вес > Выборка.ВесОстаток Тогда
            // Выдача сообщений пользователю о наличии отрицательных остатков
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Недостаточно веса товара " + Выборка.НоменклатураПредставление 
			+ " с характеристикой " + Выборка.ХарактеристикаПредставление 
			+ ". Остаток товара: " + Выборка.ВесОстаток;
            Сообщение.Сообщить(); 
            Отказ = Истина;
        КонецЕсли; 
        
        //7. Формирование движений
        Если НЕ Отказ Тогда
            Движение			= Движения.Управленческий.Добавить();
            Движение.СчетДт		= ПланыСчетов.Управленческий.ПрибылиУбытки;
            Движение.СчетКт		= ПланыСчетов.Управленческий.Товары;
            Движение.Период		= Дата;
            Движение.КоличествоКт	= Выборка.Количество;
            Движение.ВесКт		= Выборка.Вес;

            //7.1. Расчет себестоимости списания
            Если Выборка.Количество = Выборка.КоличествоОстаток Тогда
                Себестоимость = Выборка.СуммаОстаток;
            Иначе
                Себестоимость = Выборка.Количество * Выборка.СуммаОстаток / Выборка.КоличествоОстаток;
            КонецЕсли;
            Движение.Сумма = Себестоимость;

            //7.2.  Заполнение субконто
            Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура]	= Выборка.Номенклатура;
            Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Характеристики]	= Выборка.Характеристика;
            Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура]	= Выборка.Номенклатура;
            Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Характеристики]	= Выборка.Характеристика;
            
            //8. Движения по выручке
            ДвижениеВыручка		= Движения.Управленческий.Добавить();
            ДвижениеВыручка.Период	= Дата;
            ДвижениеВыручка.СчетДт	= ПланыСчетов.Управленческий.Покупатели;
            ДвижениеВыручка.СчетКт	= ПланыСчетов.Управленческий.ПрибылиУбытки;
            ДвижениеВыручка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура]	= Выборка.Номенклатура;
            ДвижениеВыручка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Характеристики]	= Выборка.Характеристика;
            ДвижениеВыручка.Сумма	= Выборка.СуммаПродажи;
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

Разберем важные моменты реализованного  алгоритма.

  • Учет ведется в разрезе номенклатуры и характеристики. Поэтому при установке управляемой блокировки, при соединении таблиц в запросе и при формировании проводок используются два поля: “Номенклатура” и “Характеристика”.
  • Может возникнуть вопрос, почему нет проверки при деление на ноль в выражении
    Себестоимость = Выборка.Количество * Выборка.СуммаОстаток / Выборка.КоличествоОстаток”?
    Дело в том, что в условии “Если Выборка.Количество > Выборка.КоличествоОстаток Тогда” уже заложена такая проверка. Если в расходной накладной списывается любое ненулевое количество, то в случае нулевого остатка сработает именно это условие. Единственный случай, когда это условие не будет работать – это указание нулевого количества в расходной накладной. Что очень сложно представить. Если есть необходимость исключить этот вариант, то нужно вставить проверку на нулевое количество в табличной части расходной накладной. Например, установить свойство “Проверка заполнения” реквизита табличной части “Количество” в значение “Выдавать ошибку”.
  • В указанной выше теме Расчет себестоимости по средней в разрезе складов. Старая методика контроля остатков проводка для отражения выручки не требуется, поэтому и не формируется. В решаемой задаче эта проводка нужна, поэтому дополнительно создается проводка по счету “ПрибылиУбытки” в корреспонденции со счетом “Покупатели”.
  • Для построения отчета необходима заполненная аналитика на счете “ПрибылиУбытки”, поэтому при формировании проводок по этому счету заполняются два субконто: Номенклатура и Характеристика.
  • В постановке задачи явно указано, что вес птиц при продаже в документе “Реализация товаров” указывается пользователем вручную. Поэтому при формировании движений используется вес, указанный в табличной части. Если этого уточнения в тексте нет, нужно найти в формулировке задачи, как должен определяться вес при списании. Например, он может рассчитываться точно так же, как и себестоимость.

Отдельно выделим следующее – корректность с точки зрения закрытия остатков “в ноль”

При оформлении продажи в документе “Реализация товаров” вес птиц указывается вручную, поэтому может возникнуть ситуация, когда количество списывается полностью – а вес при этом “в ноль” не списывается. Возникает ситуация, когда по одному ресурсу операция закрыта (остатки нулевые), а по другому ресурсу – нет (остаток не нулевой).

Аналогично, возможно, что вес списывается в ноль, но при этом количество не списывается полностью.

В постановке задачи подобные проверки не описаны. Поэтому ситуация двойственная.

С одной стороны, мы признаем это ненормальным и есть минимум пять вариантов действий:

  1. Блокировать такие операции, то есть не допускать ввод операций еще при попытке их проведения. Плюс этого варианта – “быстро, жестко, наглядно”, минус – сильно зависит от актуальности рассчитанных остатков и нужно учитывать особенности группового проведения или проведений задним числом.
  2. Выводить предупреждение / диагностическое сообщение без блокировки операции. Быстро, наглядно, но без излишней жестокости : ) Точно также критично зависит от актуальности остатков, точно также потребуется учитывать логику группового проведения или проведений задним числом, корректируя вывод предупреждений.
  3. Логировать такие ошибки, без оперативных предупреждений. Применять как при ручном проведении документа, так и при групповых операциях. Регулярно автоматически проверять ошибки в логах, при обнаружении оповещать пользователя / администратора. Добавить функцию очистки логов после исправления ошибок.
  4. Встроить отчет, который будет обнаруживать ситуации с нулевыми остатками по одному ресурсу и ненулевые по другому. Это быстро и просто, но нет гарантии, что пользователь будет это делать, все на его усмотрение. С другой стороны, это позволит быстрее исправлять такие ситуации, если они массовые / завязаны друг на друга.
  5. Автоматически занулять остатки – то есть при проведении операции сразу списывать в ноль второй остаток (ведомый), если в ноль уходит первый (ведущий). Нужно только четко договориться, что является ведущим остатком (количество / вес), но для задачи Аттестации можно предположить, что все-таки количество. Как это сделать мы разбираем в основном курсе подготовки к Аттестации по платформе.

Исходная формулировка задачи в том вопросе неоднозначна и не содержит никаких указаний на то, что делать с такими ситуациями. На очной Аттестации можно подойти к преподавателю и задать уточняющие вопросы, но в дистанционной форме такой возможности нет.

Мы моделируем дистанционную сдачу Аттестации, поэтому развернутую проверку не реализовываем, используем первый вариант из предложенных. Не разрешаем проводить документ, в котором количество списывается полностью, а вес при этом не списывается полностью (и наоборот – вес списывается полностью, а количество не списывается полностью).

Для этого в приведенную процедуру обработки проведения расходной накладной в п. 6 необходимо добавить следующий программный код:

        Если (Выборка.Количество = Выборка.КоличествоОстаток) И (Выборка.Вес <> Выборка.ВесОстаток) Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "По товару " + Выборка.НоменклатураПредставление 
			+ " с характеристикой " + Выборка.ХарактеристикаПредставление 
			+ " количество списывается полностью, а вес при этом не списывается полностью. Остаток по количеству: " 
			+ Выборка.КоличествоОстаток + ". Остаток по весу: " + Выборка.ВесОстаток;
            Сообщение.Сообщить(); 
            Отказ = Истина;
        КонецЕсли; 
        
        Если (Выборка.Вес = Выборка.ВесОстаток) И (Выборка.Количество <> Выборка.КоличествоОстаток) Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "По товару " + Выборка.НоменклатураПредставление 
			+ " с характеристикой " + Выборка.ХарактеристикаПредставление 
			+ " вес списывается полностью, а количество при этом не списывается полностью. Остаток по весу: " 
			+ Выборка.ВесОстаток + ". Остаток по количеству: " + Выборка.КоличествоОстаток;
            Сообщение.Сообщить(); 
            Отказ = Истина;
        КонецЕсли;

Переходим к вводу тестовых данных в пользовательском режиме.

Создание контрольного примера

Для начала заполняем справочники тестовыми данными.

Создаем элементы справочника “Номенклатура” – Курица и Утка.

Поскольку справочник “Характеристики” подчинен справочнику “Номенклатура”, в панели навигации формы элемента справочника “Номенклатура” расположена ссылка для перехода к характеристикам конкретной номенклатуры. Значит, быстро создавать характеристики можно прямо из формы номенклатуры.

При создании характеристик заполняем табличную часть – указываем свойства и их значения:

Создание номенклатуры и характеристик

Рисунок 19 – Создание номенклатуры и характеристик
(нажмите, чтобы увеличить картинку)

Для получения отчета, приведенного в постановке задачи, необходимо создать по паре характеристик со свойством “Цвет” и значением свойства ”Белая” и “Черная” для каждой из птиц – Курицы и Утки. Также создадим произвольное количество дополнительных свойств (на рисунке это “Назначение”).

Введем приходную накладную и проведем ее:

Создание документа “Приходная накладная”

Рисунок 20 – Создание документа “Приходная накладная”
(нажмите, чтобы увеличить картинку)

Приходная накладная сформировала следующие проводки

Проводки документа “Приходная накладная”

Рисунок 21 – Проводки документа “Приходная накладная”
(нажмите, чтобы увеличить картинку)

Обратите внимание, что ресурсы регистра бухгалтерии “Количество” и “Вес” заполнены только для счета “Товары”. Это результат работы механизма признаков учета.

Создадим документ “Операция” для отражения увеличения веса птицы:

Создание документа “Операция”

Рисунок 22 – Создание документа “Операция”
(нажмите, чтобы увеличить картинку)

Обратите внимание, что в дебете проводки указан только вес, а количество не заполнено. Таким образом, вес птиц увеличивается, а количество птиц при этом не изменяется.

Создадим документ “Расходная накладная” и проведем его.

Создание документа “Расходная накладная”

Рисунок 23 – Создание документа “Расходная накладная”
(нажмите, чтобы увеличить картинку)

При попытке провести такой документ получим сообщение об ошибке:

Сообщение об ошибке при проведении документа “Расходная накладная”

Рисунок 24 – Сообщение об ошибке при проведении документа “Расходная накладная”
(нажмите, чтобы увеличить картинку)

Дел в том, что с учетом введенных в операции данных остаток веса курицы с набором свойств “Черная – Яйценоская” составляет 4120, а остаток количества 200. В расходной накладной происходит попытка списать все количество при частичном списании веса. Поэтому, согласно принятым нами правилам, срабатывает защита от “зависания” остатка одного из ресурсов, и документ не проводится.

Если исправить вес так, чтобы и он списывался полностью, документ будет успешно проведен:

Вариант полного расхода остатка количества и веса в документе “Расходная накладная”

Рисунок 25 – Вариант полного расхода остатка количества и веса в документе “Расходная накладная”

Документ будет также успешно проведен, если и вес, и количество списываются не полностью:

Вариант неполного расхода остатка количества и веса в документе “Расходная накладная”

Рисунок 26 – Вариант неполного расхода остатка количества и веса в документе “Расходная накладная”

Для дальнейшей работы включим в наш пример оба варианта: и частичное (строка 1), и полное (строки 2-4) списание остатков веса и количества:

Окончательный вариант документа “Расходная накладная”

Рисунок 27 – Окончательный вариант документа “Расходная накладная”
(нажмите, чтобы увеличить картинку)

Проводки документа “Расходная накладная”

Проводки документа “Расходная накладная”

Рисунок 28 – Проводки документа “Расходная накладная”
(нажмите, чтобы увеличить картинку)

Расходная накладная сформировала по две проводки на каждую строку табличной части: одна проводка списывает себестоимость, другая  отражает выручку от продажи. Себестоимость списалась корректно, при этом было учтено увеличение стоимости птицы, отраженное при помощи документа “Операция”.

Тестовые данные введены, можно приступать к разработке отчета.

Перейти к следующей части решения:
“Учет животных в двух оценках одновременно – разработка отчета” (№ 17, часть 3)

Комментарии закрыты